<?php

defined('SYSPATH') or die('No direct script access.');

class Controller_User extends Controller_Template { //dziedziczenie z Controller_Template

    var $template; //definiowanie zmiennej do obsługi widoków

    public function action_index() {
        $this->template = View::factory('user/main'); //załadowanie widoku
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth
        $whoami = $auth->get_user(); //pobieranie danych o zalogowanym użytkowniku

        if ($auth->logged_in('login')) { //sprawdzanie czy użytkownik jest zalogowany
            //jeśli jest to dopuszczamy (to sekcja dla zalogowanych)
            $this->request->redirect('page/index');
            //i cała reszta kodu dla autoryzowanego użytkownika
        } else { //jeśli nie jest zalogowany, przekierowujemy do logowania
            $this->request->redirect('user/login'); //jeśli nie, przekierowujemy do logowania
        }
    }

    public function action_register() {
        $this->template = View::factory('user/register'); //załadowanie widoku
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth

        if ($auth->logged_in('login')) { //sprawdzanie czy użytkownik jest zalogowany
            $this->request->redirect('user/login'); //jeśli nie, przekierowujemy do logowania
        } else {

            if ($_POST) { //sprawdzanie czy dane są przesyłane POSTem
                $walidacja = new Validation(array(
                            'login' => $_POST['login'],
                            'email' => $_POST['email'],
                            'haslo' => $_POST['haslo'],
                        )); //tworzenie obiektu walidacji
                $walidacja->rule('login', 'not_empty')
                        ->rule('login', 'alpha_dash')
                        ->rule('email', 'not_empty')
                        ->rule('haslo', 'not_empty')
                        ->rule('email', 'email');

                try {
                    if ($walidacja->check()) {
                        $user = ORM::factory('user'); //tworzenie obiektu ORM z użyciem tabeli users

                        $user->username = $_POST['login']; //przypisanie pola z formularza do nazwy kolumny w tabeli
                        $user->email = $_POST['email'];
                        $user->password = $_POST['haslo'];


                        //instrukcja warunkowa/zapis danych użytkownika/przypisanie roli "login"
                        if ($user->save() && $user->add('roles', ORM::factory('role', array('name' => 'login')))) {
                            $this->template->sukces = 'Dziękujemy za rejestrację!'; //przekazanie zmiennej $sukces do widoku
                            $this->request->redirect('user/login');
                        } else {
                            $this->template->fail = 'Nie udało się dodać użytkownika!'; //przekazanie zmiennej $fail do widoku
                        }
                    } else {
                        $this->template->fail = 'Uzupełnij poprawnie formularz rejestracyjny!';
                    }
                } catch (Kohana_Exception $e) {
//                    echo Debug::vars($_POST);
//                    echo Debug::vars($e->getMessage());
//                    echo Debug::vars($e->text($e));
                }
            }
        }
    }

    public function action_login() {
        $this->template = View::factory('user/login');
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth


        if ($auth->logged_in('login')) { //sprawdzanie czy użytkownik jest zalogowany
            $this->request->redirect('page/index'); //jeśli jest, przekierowujemy do user
        } else {

            if ($_POST) {
                $walidacja = new Validation($_POST); //tworzenie obiektu walidacji
                $walidacja->rule('login', 'not_empty')
                        ->rule('haslo', 'not_empty');

                if ($walidacja->check()) { //jeśli walidacja OK to zaloguj
                    $r = $auth->login($_POST['login'], $_POST['haslo'], FALSE); //logowanie użytkownika

                    if (!$r) {
                        $this->template->fail = 'Login lub hasło są niepoprawne';
                    } else {
                        $this->request->redirect('user'); //przekierowanie po zalogowaniu do kontrolera user
                    }
                } else {
                    $this->template->fail = 'Login lub hasło są niepoprawne';
                }
            }
        }
    }

    public function action_logout() {
        $this->template = View::factory('user/login');
        $auth = Auth::instance(); //utworzenie instancji obiektu Auth
        if ($auth->logged_in('login')) { //sprawdzanie czy użytkownik jest zalogowany
            if ($auth->logout(TRUE)) { //jeśli jest, to go wylogowujemy
                $this->template->sukces = 'Pomyślnie wylogowano!';
            } else {
                $this->request->redirect('user/login'); //przekierowujemy do logowania
            }
        } else { //jeśli nie jest zalogowany przekierowujemy do logowania
            $this->request->redirect('user/login');
        }
    }

    public function after() {

        if ($this->auto_render) {
            $styles = array(
                'media/css/main_login.css' => 'screen, projection',
            );

            $this->template->title = "SZF - logowanie";
            $this->template->styles = $styles;
            $this->template->scripts = array();
        }

        parent::after();
    }

}